package com.ruoyi.scheme.dto;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.*;
import java.math.BigDecimal;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class ErsSchemeCostUploadDTO {

    // 主键（批量新增时无需传递，由数据库自增生成）
    // private Long id;

    // 生态修复工程造价ID（多个细项共享同一个ID，用于分组）
    @NotNull(message = "造价分组ID（schemeCostId）不能为空")
    @Positive(message = "造价分组ID（schemeCostId）必须为正数")
    private Integer schemeCostId;

    // 关联的方案ID（外键）
    @NotNull(message = "方案ID（schemeId）不能为空")
    @Positive(message = "方案ID（schemeId）必须为正数")
    private Long schemeId;

    // 单价项名称（如“边坡加固材料”）
    @NotBlank(message = "单价项名称（itemName）不能为空")
    @Size(max = 100, message = "单价项名称（itemName）长度不能超过100字符")
    private String itemName;

    // 修复方案分类（1-4的枚举值）
    @NotNull(message = "方案分类（category）不能为空")
    @Min(value = 1, message = "方案分类（category）必须为1-4的整数")
    @Max(value = 4, message = "方案分类（category）必须为1-4的整数")
    private Integer category;

    // 计量单位（如“m²”“株”）
    @NotBlank(message = "计量单位（unit）不能为空")
    @Size(max = 32, message = "计量单位（unit）长度不能超过32字符")
    private String unit;

    // 单价（金额，保留两位小数）
    @NotNull(message = "单价（unitPrice）不能为空")
    @DecimalMin(value = "0.01", message = "单价（unitPrice）必须大于0")
    @Digits(integer = 10, fraction = 2, message = "单价（unitPrice）最多保留2位小数")
    private BigDecimal unitPrice;

    // 工程面积（单位：m²）
    @NotNull(message = "面积（area）不能为空")
    @DecimalMin(value = "0.01", message = "面积（area）必须大于0")
    @Digits(integer = 10, fraction = 2, message = "面积（area）最多保留2位小数")
    private BigDecimal area;

    // 总价（单价×面积，建议前端计算后传递，或后端插入时计算）
    @NotNull(message = "总价（totalPrice）不能为空")
    @DecimalMin(value = "0.01", message = "总价（totalPrice）必须大于0")
    @Digits(integer = 12, fraction = 2, message = "总价（totalPrice）最多保留2位小数")
    private BigDecimal totalPrice;

    // 创建时间（无需前端传递，由后端或数据库自动生成）
    // private LocalDateTime createTime;

    // 更新时间（无需前端传递，由后端或数据库自动更新）
    // private LocalDateTime updateTime;
}
